﻿#ifndef CAMERAFACTORYINTERFACE_H
#define CAMERAFACTORYINTERFACE_H


#include <QList>
#include "IndustryCamera.h"
#include "IndustryCameraInfo.h"
namespace Qly {

/**
 * @brief The CameraFactoryInterface class 纯虚接口类每个相机支持 dll 都应该实现这个接口
 *
 */
struct CameraFactoryInterface
{
    /**
     * @brief availableCameras 查找当前接口支持的属于 types 类型的所有相机
     * @param types
     * @return
     */
    virtual QList<IndustryCameraInfo> availableCameras( QSet<CameraType> types ) = 0;
    /**
     * @brief availableCameras 查找当前接口支持的属于 type 类型的所有相机
     * @param type
     * @return
     */
    virtual QList<IndustryCameraInfo> availableCameras( CameraType type ) = 0;
    /**
     * @brief availableCameras 获得当前接口支持的所有相机
     * @return
     */
    virtual QList<IndustryCameraInfo> availableCameras() = 0;
    /**
     * @brief findCameraByName 根据相机的名字建立相机对象。
     * @param name
     * @param parent
     * @return 失败则返回 nullptr
     */
    virtual IndustryCamera * findCameraByName(QString name, QObject *parent = 0) = 0;
    /**
     * @brief defaultCamera 打开当前接口支持的第一个相机
     * @param parent
     * @return 失败则返回 nullptr
     */
    virtual IndustryCamera * defaultCamera(QObject *parent = 0) = 0;
    /**
     * @brief vendorName 返回当前接口的名称
     * @return
     */
    virtual QString vendorName() = 0;

    virtual bool release(IndustryCamera * camera) = 0;

    virtual ~CameraFactoryInterface() {}
};
}


#endif // CAMERAFACTORYINTERFACE_H
